package com.bjsxt;
/**终止线程
 * 如果想在一个线程中终止另一个线程我们一般不使用JDK提供的stop()/destroy()
 * 方法（它们本身也被JDK废弃了）。通常的做法是提供一个boolean型的终止变量，当这个变
 * 量值为false时，则终止线程的运行，这样子线程终止前会把后面的代码运行完才终止*/
/*stop()/destroy()方法会直接终止线程，后面还有的代码不会执行*/
public class StopThread implements Runnable{
private boolean flag = true;
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"线程开始");
        int i =0;
        while (flag){

            System.out.println(Thread.currentThread().getName()+" "+i);
            try {
                Thread.sleep(1000);//1000毫秒=1s
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            i++;
        }
        System.out.println(Thread.currentThread().getName()+"线程结束");
    }
    public void stop(){
        this.flag = false;
    }

    public static void main(String[] args) throws Exception{
        System.out.println("主线程开始");
        StopThread st = new StopThread();
        Thread t1 = new Thread(st);
        t1.start();
        //在主线程中终止子线程，运用阻塞状态（IO流，休眠）
        //键盘输入  不输入时主线程阻塞，主线程不结束运行，键盘输入后，主线程结束
        System.in.read();
        st.stop();//用对象引用stop()方法，终止线程
        System.out.println("主线程结束");
    }
}
